#ifndef STON_DBC_H
#define STON_DBC_H

#include "stonkeeper.h"

// Needed only for using StonManagerRW
#include "stonmanagerrw.h"

class StonDBC {
// === Declarations needed for using StonKeeper === //
    // The two declarations below define the StonKeeper template instance to use (must be the same)
    // - First template parameter must be your class
    // - Second template parameter must be a Manager class for StonKeeper
    // [TEST] Choose Manager: StonManager (single-threaded) or StonManagerRW (multi-threaded)
    friend class StonKeeper<StonDBC, StonManagerRW>;
    typedef StonKeeper<StonDBC, StonManagerRW> TKeeper;
    // Function to be able to define your dependencies
    static void setupDepends();
    // Private constructor, copy constructor, assignment operator, destructor
    StonDBC();
    StonDBC(StonDBC const &);
    StonDBC & operator =(StonDBC const &);
    ~StonDBC();
public:
    // Function others will call to define they depend on you
    inline static bool keepAlive() { return TKeeper::keepSingletonAlive(); }
    // Function to get the singleton instance
    inline static StonDBC * getInstance() { return TKeeper::getSingleton(); }

// === Actual implementation details of your class === //
private:
    char const * message;
public:
    void doUse();
};

#endif
